#ifndef LGE2D_LOG_HPP_
#define LGE2D_LOG_HPP_

namespace lge2d
{
namespace core
{
	class ILog
	{
	public:
		enum LogLevel
		{
			InfoLevel = 0,
			WarningLevel,
			ErrorLevel,
			CriticalLevel
		};

		virtual ~ILog() {}

		virtual void Log(LogLevel level, const char* msg, ...) = 0;

		virtual void Info(const char* msg, ...) = 0;
		virtual void Warning(const char* msg, ...) = 0;
		virtual void Error(const char* msg, ...) = 0;
		virtual void Critical(const char* msg, ...) = 0;

		virtual void SetLogLevel(LogLevel level) = 0;
		virtual LogLevel GetLogLevel() const = 0;
	};

	ILog* CreateLog();
	void DestroyLog(ILog* log);
} /* namespace core */
} /* namespace lge2d */

#endif /* LGE2D_LOG_HPP_ */
